package com.zrrd.learn.chapter07;

import java.util.Random;
import java.util.Arrays;
import java.util.Scanner;
/**
 * 字符串练习1
 *
 * @author asus
 * @version 1.0
 * @date 2023/7/18 8:26
 */
public class StringWork01 {
    //    字符串转化（压缩） “aabbccddee” -> “a2b2c2d2e2”

    public static void question01(String s1) {
        char[] arr = s1.toCharArray();
        //将字符串转换为字符数组
        StringBuilder arr1 = new StringBuilder();
        //新建一个直接累加的数组
        int count = 1;
        //定义一个计数器，用来计算重复字符的个数
        arr1.append(arr[0]);
        //放入第一个字符
        char temp = arr[0];
        //将目标字符数组的第一个元素作为比较目标存入temp
        for (int j = 1; j < arr.length; j++) {
            //遍历字符数组
            if (temp == arr[j]) {
                //判断数组arr当前对象与比较目标temp是否相等
                count++;
                //相等计数器加一
            } else {
                //数组arr当前对象与比较目标temp不相等
                arr1.append((char) (count + '0'));
                //数组arr1下一位存储上一元素的个数
                arr1.append(arr[j]);
                //将新的比较目标存入arr1
                temp = arr[j];
                //更新比较目标temp的值
                count = 1;
                //计数器置1,，用来计算新的比较目标temp的值
            }
        }
        arr1.append((char) (count + '0'));
        //当最后一位与前一位相等时会直接跳出循环，
        //这时候需要在循环体外将计数器count的值加到数组的后面
        String str1 = new String(arr1);
        //将字符数组转换为字符串
        System.out.println(str1);

    }

//    统计字符串“abc21de416f”中数字个数

    public static void question02(String s2) {
//        char[] a1=s2.toCharArray();将字符串转换为字符数组
        int count = 0;
        //设置一个计数器
        for (int i = 0; i < s2.length(); i++) {
            if (s2.charAt(i) >= '0' && s2.charAt(i) <= '9') {
                //char charAt(int i)从字符串中返回一个下标为i的字符
                count++;
            }
        }
        System.out.println("数字个数=" + count);
    }

//    设计一个方法，将给定字符串的正序和反序进行连接 ok—>okko

    public static void question03(String s3) {
        char[] s4 = s3.toCharArray();
        String s5 = "";
        for (int i = s4.length - 1; i >= 0; i--) {
            s5 += String.valueOf(s4[i]);
        }
        System.out.println(s3 + s5);
    }

//    设计一个方法，统计“a”在字符串“this is a test of java”中出现的次数

    public static void question04(String s6) {
        int num = 0;
        for (int i = 0; i < s6.length(); i++) {
            if (s6.charAt(i) == 'a') {
                num++;
            }
        }
        System.out.println("a出现的次数" + num);
    }

//    设计一个方法，将给定的字符串每一个首字母大写 “this is a test of java”---->“This Is A Test Of Java”

    public static void question05(String s7) {
        /*
         * 思路：
         * 1.首先将字符串使用分割方法按照空格进行分割，存入字符串数组
         * 2.定义一个新数组，其长度等于分割后存入字符串数组的长度
         * 3.遍历字符串数组，将字符串数组第一个元素取出，剪切第一个字符使其变为大写，
         * 再加上其剩余字符，连接起来存入到新数组
         *
         * */
        //用于接收最终拼接完整的字符串
        String result = "";
        //将完整的字符串按照空格拆分
        String[] value = s7.split(" ");
        //循环处理每一个单词 截取首字母变大写 截取其余字母  整体拼接
        for (int i = 0; i < value.length; i++) {
            //获取每一个单词
            String s8 = value[i];
            //首字母大写
            String first = s8.substring(0, 1).toUpperCase();
            String other = s8.substring(1);
            //其余的字母
            result = result.concat(first.concat(other) + " ");
        }
        System.out.println(result);
    }

//    设计一个方法，获取给定字符串中的全部数字 “za1o1zbp24tcq”

    public static void question06(String s9) {
        char[] a = s9.toCharArray();
        for (int i = 0; i < a.length; i++) {
            if (a[i] >= '0' && a[i] <= '9') {
                System.out.print(a[i]);
            }
        }
    }

    //  编写程序在将字符串 “`want you to know one thing`”, 统计出字母 “`n`”和 字母 “`o`”的出现次数

    public static void question07(String s10) {
        int num1 = 0;
        int num2 = 0;
        for (int i = 0; i < s10.length(); i++) {
            if (s10.charAt(i) == 'n') {
                num1++;
            }
            if (s10.charAt(i) == 'o') {
                num2++;
            }
        }
        System.out.println("字母n出现的次数为：" + num1);
        System.out.println("字母o出现的次数为：" + num2);
    }

//    给定一个长度,随机产生一个该长度的字符串,由大写,小写字母

    public static void question08(String s11) {
        Random r = new Random();


    }

//    编写程序将“jdk”全部变为大写，并输出到屏幕，截取子串“DK”，并输出到屏幕

    public static void question09(String s11) {
        String s12 = s11.toUpperCase();
        String s13 = s12.substring(1, 3);
        System.out.println(s13);

    }

    //    编写一个程序，将下面的一段文本中的各个单词的字母顺序翻转
//
//“To  be or not to and”,变成“oT eb ro ton ot dna”

    public static void question10(String s14) {
        String result="";
        String[] s15 = s14.split(" ");
//        for (int i = 0; i < s15.length; i++) {
            String s16 = String.valueOf(s15);
            result= (s16);
//        }
        System.out.print(result);
    }
//    public static String reverse(String s){
//        char[] chars=s.toCharArray();
//        s="";
//        for(int i=chars.length-1;i>=0;i--){
//            s+=chars[i];
//        }
//        return s;
//    }

//    编写程序将String类型字符串“test”变为“tset”

    public static void question11(StringBuffer s14){
        String a2=String.valueOf(s14.reverse());
        System.out.println(a2);
    }
//"轻轻的我走了， 正如我轻轻的来；我轻轻的招手，作别西天的云彩。"最后一次出现"轻"的位置

    public static void question12(String s15){
        int last=s15.lastIndexOf("轻");
        if(last==-1) {
            System.out.println("语句中没有‘轻’");
        }else {
            System.out.println("‘轻’最后一次出现的位置："+last);
        }

    }
//    求字符串“powerful heaven dragon”中有多少种字符

    public static void question13(){

    }
//    字符串“peter piper picked a peck of pickled peppers”中有多少以p开头的单词

    public static void question14(){
        String s16="peter piper picked a peck of pickled peppers";
        String[] a = s16.split(" ");
        int num=0;
        for (int i = 0; i < a.length; i++) {
            String b = a[i];
            if (b.charAt(0)=='p'){
                num++;
            }
        }
        System.out.println("'p'开头的单词有"+num+"个");
    }




    public static void main(String[] args) {
        String a = "abc21de416f";
        String b = "ok";
        String c = "this is a test of java";
        String d = "want you to know one thing";
        String e = "aabbccddee";
//        question09("jdk");
//            question01(e);
//        question02(a);
//        question03(b);
//        question04(c);
//        question05(c);
//        question06(a);
//        question07(d);
//        question10("To  be or not to and");
        StringBuffer f= new StringBuffer("test");
//        question11(f);
        String h="轻轻的我走了， 正如我轻轻的来；我轻轻的招手，作别西天的云彩。";
//        question12(h);
        question14();
    }
}
